#ifndef CHATVIEW_H
#define CHATVIEW_H

#include <QWidget>
#include <QVBoxLayout>  // 用于使用 QVBoxLayout 类
#include <QScrollArea>  // 用于使用 QScrollArea 类
#include <QEvent>       // 用于事件过滤，需要使用 QEvent 类
#include <QPaintEvent>  // 用于处理绘画事件，需要使用 QPaintEvent 类
#include <QScrollBar>   // 用于处理滚动条移动信号，需要使用 QScrollBar 类

namespace Ui {
class ChatView;
}

// 定义 ChatView 类，继承自 QWidget（窗口部件类）
class ChatView: public QWidget
{
    Q_OBJECT  // 使用 Qt 的元对象系统，支持信号与槽机制
public:
    // 构造函数
    ChatView(QWidget *parent = Q_NULLPTR);

    // 向聊天视图中添加聊天项的函数（尾插法）
    void appendChatItem(QWidget *item);

    // 向聊天视图中添加聊天项的函数（头插法）
    void prependChatItem(QWidget *item);

    // 向聊天视图中添加聊天项的函数（在中间插入）
    void insertChatItem(QWidget *before, QWidget *item);
    void removeAllItem();


protected:
    // 事件过滤器，用于处理不同类型的事件
    bool eventFilter(QObject *o, QEvent *e) override;

    // 绘画事件，用于自定义控件的绘制
    void paintEvent(QPaintEvent *event) override;

private slots:
    // 滚动条位置变化时的槽函数
    void onVScrollBarMoved(int min, int max);

private:
    // 初始化样式表（例如滚动条的样式）
    void initStyleSheet();

private:
    // m_pVl：存储主垂直布局的指针
    QVBoxLayout *m_pVl;

    // m_pScrollArea：滚动区域指针
    QScrollArea *m_pScrollArea;

    // isAppended：指示是否已经尾插了一个聊天项
    bool isAppended;
};

#endif // CHATVIEW_H
